import { Router } from "vue-router"
/**
 * 
 * @param router 
 * @param map 
 * 根据当前路由得到状态数据
 * 因为有些状态刷新页面后无法保存 因此动态的改变路由来记录页面行径 在后续可能会存在的页面刷新保存记录 更加合理
 * map不需要返回的原因是 从始至终map都指向一个地址修改的都是一个map 因此 此中对map的修改也能响应到使用该函数中页面的map
 */
export function baseRouteGetStatus(router:Router,map:Map<string,any>) : void{
    Object.keys(router.currentRoute.value.query).forEach(key => {
        map.set(key,router.currentRoute.value.query[key])
    })
}
/**
 * 
 * @param router router
 * @param map 传入保存路由数据的map
 * @returns obj 需要修改的数据
 * 先根据当前的router修改map中对应title的value值 然后再遍历map 查看map中的key值是否存在对应的value 没有或等于key则不显示
 * 然后再修改当前路由
 */
export function changeNowRoute(router:Router,map:Map<string,any>){
    let obj = {} as any
    map.forEach((val,key) => {
        if (val && val !== key) obj[key] = val
    })
    router.push({ query:{ ...obj },replace: true })
    return obj
}
/**
 * 
 * @param map 
 * @param key 需要检测的键
 * @param val 需要判断的值 可选值 对于某些键值对 初始化不一定key与val相同  目前还未用到
 * @returns 
 * 检测当前map中是否含有val项 或者是否含有key = val 项 
 * has && key=val则返回 true
 * !has true
 * has && key != val false  -> 不希望值
 */
export function detectionMapHas(map:Map<string,any>,key:string,val?:string){
    if (!map.has(key) || map.get(key) === key) return true
    else return false
}
/**
 * 
 * @param map 
 * @param vals 需要检测的全部val
 * @returns 
 * 循环检测map中是否存在 has && key ！= val 情况 有一个则会返回 false -> 不希望值
 * 
 */
export function detectionAll(map:Map<string,any>,...vals:string[]){
    let flag = true
    vals.forEach(el => {
        if (!detectionMapHas(map,el)){
            flag = false
        }
    })
    return flag
}